package co.com.inventarios.vista;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;

import co.com.inventarios.logica.DlluserLogica;
import co.com.inventarios.logica.IDlluserLogica;
import co.com.inventarios.logica.IIvaLogica;
import co.com.inventarios.logica.ILineaLogica;
import co.com.inventarios.logica.IProbodegaLogica;
import co.com.inventarios.logica.IProductoLogica;
import co.com.inventarios.logica.ITrasladoLogica;
import co.com.inventarios.logica.IUnimedLogica;
import co.com.inventarios.logica.IVinculadoLogica;
import co.com.inventarios.logica.IvaLogica;
import co.com.inventarios.logica.LineaLogica;
import co.com.inventarios.logica.ProbodegaLogica;
import co.com.inventarios.logica.ProductoLogica;
import co.com.inventarios.logica.UnimedLogica;
import co.com.inventarios.logica.VinculadoLogica;
import co.com.inventarios.modelo.Bodega;
import co.com.inventarios.modelo.Dlluser;
import co.com.inventarios.modelo.Linea;
import co.com.inventarios.modelo.Probodega;
import co.com.inventarios.modelo.ProbodegaId;
import co.com.inventarios.modelo.ProbodegaWork;
import co.com.inventarios.modelo.Producto;
import co.com.inventarios.modelo.ProductoWork;
import co.com.inventarios.modelo.Prounimed;
import co.com.inventarios.modelo.ProunimedId;
import co.com.inventarios.modelo.ProunimedWork;
import co.com.inventarios.modelo.Tipoiva;
import co.com.inventarios.modelo.Unimed;
import co.com.inventarios.modelo.UnimedWork;
import co.com.inventarios.modelo.Vinculado;
import co.com.inventarios.utils.MessageBundleLoader;
import co.com.inventarios.utils.SessionUtil;
import co.com.inventarios.utils.SessionVars;
import co.com.inventarios.utils.Utilidades;

import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.ext.RowSelectorEvent;

public class Producto_MB {
	private int swestado = 0; // 0 null, 1 nuevo, 2 editando
	private HtmlCommandButton cmdelimina;
	private HtmlCommandButton cmdedita;
	private HtmlCommandButton cmdnuevo;
	private String nombreEliminar;
	private HtmlInputText txtBuscar;
	private String buscar;
	private Dlluser miDlluser;
	private Producto ProductoEdicion = new Producto();
	private Prounimed ProunimedEdicion = new Prounimed();
	private Probodega ProbodegaEdicion = new Probodega();
	private Probodega miProbodega = new Probodega();
	private ProbodegaId miProbodegaId = new ProbodegaId();
	private ProunimedId miProunimedId = new ProunimedId();
	private Prounimed miProunimed = new Prounimed();
	private boolean selecprounimed = false;
	private boolean selecprobodega = false;
	private HtmlSelectOneMenu seleconebusqueda;
	private String busbtipo;
	private ProductoWork[] productow;
	private String busquedacmbbus;
	private IProductoLogica Producto_logica;

	private IUnimedLogica Prounimed_logica;
	private IProbodegaLogica Probodega_logica;

	private Utilidades Utils;
	private List<Producto> listProducto = new ArrayList<Producto>();

	private List<Probodega> listProbodega = new ArrayList<Probodega>();
	private List<Prounimed> listProunimed = new ArrayList<Prounimed>();
	private ProbodegaWork[] probodegaw;
	private ProunimedWork[] prounimedw;

	private List<Probodega> listProbodegaver = new ArrayList<Probodega>();
	private List<Prounimed> listProunimedver = new ArrayList<Prounimed>();

	private boolean modalRendered;

	private boolean modalRenderedprobodega = false;
	private boolean modalRenderedprounimed = false;
	private String nombreEliminarprobodega;
	private String nombreEliminarprounimed;

	private boolean uniselec;
	private Date fechabusca;
	private boolean busqueda1 = true;
	private boolean busqueda2 = false;
	private boolean busqueda3 = false;
	private boolean busqueda4 = false;
	private boolean busqueda5 = false;
	private int regTable;
	private String busuario = (String) SessionUtil.get(SessionVars.USER);
	private String busunombre = (String) SessionUtil.get(SessionVars.USUNOMBRE);

	private String bprounimed;
	private HtmlInputText txtprounimed;
	private String bprounimednom;

	private String bbodegas;
	private HtmlInputText txtbodegasal;
	private String bbodegasnom;
	private HtmlInputText txtaprocantidad;
	private Double aprocantidad = Double.valueOf("0");

	private boolean modalpopupbodega = false;
	private String busquedacmbbodega;
	private String buscarbod;
	private HtmlInputText txtBuscarbod;
	private List<Bodega> listaBodegapopup;
	private HtmlCommandButton popup_cmdselecionarBod;

	private Bodega miBodegas;
	private IDlluserLogica Dlluser_logica;

	public HtmlCommandButton getCmdelimina() {
		return cmdelimina;
	}

	public void setCmdelimina(HtmlCommandButton cmdelimina) {
		this.cmdelimina = cmdelimina;
	}

	public HtmlCommandButton getCmdedita() {
		return cmdedita;
	}

	public Date getFechabusca() {
		return fechabusca;
	}

	public void setFechabusca(Date fechabusca) {
		this.fechabusca = fechabusca;
	}

	public boolean isBusqueda1() {
		return busqueda1;
	}

	public void setBusqueda1(boolean busqueda1) {
		this.busqueda1 = busqueda1;
	}

	public boolean isBusqueda2() {
		return busqueda2;
	}

	public void setBusqueda2(boolean busqueda2) {
		this.busqueda2 = busqueda2;
	}

	public boolean isBusqueda3() {
		return busqueda3;
	}

	public ProunimedId getMiProunimedId() {
		return miProunimedId;
	}

	public void setMiProunimedId(ProunimedId miProunimedId) {
		this.miProunimedId = miProunimedId;
	}

	public Dlluser getMiDlluser() {
		return miDlluser;
	}

	public void setMiDlluser(Dlluser miDlluser) {
		this.miDlluser = miDlluser;
	}

	public Probodega getMiProbodega() {
		return miProbodega;
	}

	public ProbodegaId getMiProbodegaId() {
		return miProbodegaId;
	}

	public void setMiProbodegaId(ProbodegaId miProbodegaId) {
		this.miProbodegaId = miProbodegaId;
	}

	public void setMiProbodega(Probodega miProbodega) {
		this.miProbodega = miProbodega;
	}

	public Prounimed getMiProunimed() {
		return miProunimed;
	}

	public void setMiProunimed(Prounimed miProunimed) {
		this.miProunimed = miProunimed;
	}

	public List<Probodega> getListProbodegaver() {
		return listProbodegaver;
	}

	public void setListProbodegaver(List<Probodega> listProbodegaver) {
		this.listProbodegaver = listProbodegaver;
	}

	public List<Prounimed> getListProunimedver() {
		return listProunimedver;
	}

	public void setListProunimedver(List<Prounimed> listProunimedver) {
		this.listProunimedver = listProunimedver;
	}

	public Unimed getMiUnimedpro() {
		return MiUnimedpro;
	}

	public void setMiUnimedpro(Unimed miUnimedpro) {
		MiUnimedpro = miUnimedpro;
	}

	public String getTipobusprounimed() {
		return tipobusprounimed;
	}

	public void setTipobusprounimed(String tipobusprounimed) {
		this.tipobusprounimed = tipobusprounimed;
	}

	public boolean isModalRenderedprobodega() {
		return modalRenderedprobodega;
	}

	public void setModalRenderedprobodega(boolean modalRenderedprobodega) {
		this.modalRenderedprobodega = modalRenderedprobodega;
	}

	public boolean isModalRenderedprounimed() {
		return modalRenderedprounimed;
	}

	public void setModalRenderedprounimed(boolean modalRenderedprounimed) {
		this.modalRenderedprounimed = modalRenderedprounimed;
	}

	public String getNombreEliminarprobodega() {
		return nombreEliminarprobodega;
	}

	public Bodega getMiBodegas() {
		return miBodegas;
	}

	public void setMiBodegas(Bodega miBodegas) {
		this.miBodegas = miBodegas;
	}

	public IDlluserLogica getDlluser_logica() {
		return Dlluser_logica;
	}

	public void setDlluser_logica(IDlluserLogica dlluser_logica) {
		Dlluser_logica = dlluser_logica;
	}

	public void setNombreEliminarprobodega(String nombreEliminarprobodega) {
		this.nombreEliminarprobodega = nombreEliminarprobodega;
	}

	public String getNombreEliminarprounimed() {
		return nombreEliminarprounimed;
	}

	public void setNombreEliminarprounimed(String nombreEliminarprounimed) {
		this.nombreEliminarprounimed = nombreEliminarprounimed;
	}

	public IUnimedLogica getProunimed_logica() {
		return Prounimed_logica;
	}

	public void setProunimed_logica(IUnimedLogica prounimed_logica) {
		Prounimed_logica = prounimed_logica;
	}

	public IProbodegaLogica getProbodega_logica() {
		return Probodega_logica;
	}

	public void setProbodega_logica(IProbodegaLogica probodega_logica) {
		Probodega_logica = probodega_logica;
	}

	public Prounimed getProunimedEdicion() {
		return ProunimedEdicion;
	}

	public void setProunimedEdicion(Prounimed prounimedEdicion) {
		ProunimedEdicion = prounimedEdicion;
	}

	public Probodega getProbodegaEdicion() {
		return ProbodegaEdicion;
	}

	public void setProbodegaEdicion(Probodega probodegaEdicion) {
		ProbodegaEdicion = probodegaEdicion;
	}

	public boolean isSelecprounimed() {
		return selecprounimed;
	}

	public void setSelecprounimed(boolean selecprounimed) {
		this.selecprounimed = selecprounimed;
	}

	public boolean isSelecprobodega() {
		return selecprobodega;
	}

	public void setSelecprobodega(boolean selecprobodega) {
		this.selecprobodega = selecprobodega;
	}

	public List<Probodega> getListProbodega() {
		return listProbodega;
	}

	public void setListProbodega(List<Probodega> listProbodega) {
		this.listProbodega = listProbodega;
	}

	public List<Producto> getListProducto() {
		return listProducto;
	}

	public void setListProducto(List<Producto> listProducto) {
		this.listProducto = listProducto;
	}

	public List<Prounimed> getListProunimed() {
		return listProunimed;
	}

	public void setListProunimed(List<Prounimed> listProunimed) {
		this.listProunimed = listProunimed;
	}

	public String getBusuario() {
		return busuario;
	}

	public void setBusuario(String busuario) {
		this.busuario = busuario;
	}

	public String getBusunombre() {
		return busunombre;
	}

	public void setBusunombre(String busunombre) {
		this.busunombre = busunombre;
	}

	public void setBusqueda3(boolean busqueda3) {
		this.busqueda3 = busqueda3;
	}

	public boolean isBusqueda4() {
		return busqueda4;
	}

	public void setBusqueda4(boolean busqueda4) {
		this.busqueda4 = busqueda4;
	}

	public boolean isBusqueda5() {
		return busqueda5;
	}

	public void setBusqueda5(boolean busqueda5) {
		this.busqueda5 = busqueda5;
	}

	public boolean isUniselec() {
		return uniselec;
	}

	public void setUniselec(boolean uniselec) {
		this.uniselec = uniselec;
	}

	public boolean isModalRendered() {
		return modalRendered;
	}

	public int getRegTable() {
		return regTable;
	}

	public void setRegTable(int regTable) {
		this.regTable = regTable;
	}

	public String getBprounimed() {
		return bprounimed;
	}

	public void setBprounimed(String bprounimed) {
		this.bprounimed = bprounimed;
	}

	public HtmlInputText getTxtprounimed() {
		return txtprounimed;
	}

	public void setTxtprounimed(HtmlInputText txtprounimed) {
		this.txtprounimed = txtprounimed;
	}

	public String getBprounimednom() {
		return bprounimednom;
	}

	public void setBprounimednom(String bprounimednom) {
		this.bprounimednom = bprounimednom;
	}

	public String getBbodegas() {
		return bbodegas;
	}

	public void setBbodegas(String bbodegas) {
		this.bbodegas = bbodegas;
	}

	public HtmlInputText getTxtbodegasal() {
		return txtbodegasal;
	}

	public void setTxtbodegasal(HtmlInputText txtbodegasal) {
		this.txtbodegasal = txtbodegasal;
	}

	public String getBbodegasnom() {
		return bbodegasnom;
	}

	public void setBbodegasnom(String bbodegasnom) {
		this.bbodegasnom = bbodegasnom;
	}

	public HtmlInputText getTxtaprocantidad() {
		return txtaprocantidad;
	}

	public void setTxtaprocantidad(HtmlInputText txtaprocantidad) {
		this.txtaprocantidad = txtaprocantidad;
	}

	public Double getAprocantidad() {
		return aprocantidad;
	}

	public void setAprocantidad(Double aprocantidad) {
		this.aprocantidad = aprocantidad;
	}

	public boolean isModalpopupbodega() {
		return modalpopupbodega;
	}

	public void setModalpopupbodega(boolean modalpopupbodega) {
		this.modalpopupbodega = modalpopupbodega;
	}

	public String getBusquedacmbbodega() {
		return busquedacmbbodega;
	}

	public void setBusquedacmbbodega(String busquedacmbbodega) {
		this.busquedacmbbodega = busquedacmbbodega;
	}

	public String getBuscarbod() {
		return buscarbod;
	}

	public void setBuscarbod(String buscarbod) {
		this.buscarbod = buscarbod;
	}

	public HtmlInputText getTxtBuscarbod() {
		return txtBuscarbod;
	}

	public void setTxtBuscarbod(HtmlInputText txtBuscarbod) {
		this.txtBuscarbod = txtBuscarbod;
	}

	public List<Bodega> getListaBodegapopup() {
		return listaBodegapopup;
	}

	public void setListaBodegapopup(List<Bodega> listaBodegapopup) {
		this.listaBodegapopup = listaBodegapopup;
	}

	public HtmlCommandButton getPopup_cmdselecionarBod() {
		return popup_cmdselecionarBod;
	}

	public void setPopup_cmdselecionarBod(
			HtmlCommandButton popup_cmdselecionarBod) {
		this.popup_cmdselecionarBod = popup_cmdselecionarBod;
	}

	public Producto getProductoEdicion() {
		return ProductoEdicion;
	}

	public void setProductoEdicion(Producto productoEdicion) {
		ProductoEdicion = productoEdicion;
	}

	public void setModalRendered(boolean modalRendered) {
		this.modalRendered = modalRendered;
	}

	public void setCmdedita(HtmlCommandButton cmdedita) {
		this.cmdedita = cmdedita;
	}

	public HtmlCommandButton getCmdnuevo() {
		return cmdnuevo;
	}

	public void setCmdnuevo(HtmlCommandButton cmdnuevo) {
		this.cmdnuevo = cmdnuevo;
	}

	public String getNombreEliminar() {
		return nombreEliminar;
	}

	public void setNombreEliminar(String nombreEliminar) {
		this.nombreEliminar = nombreEliminar;
	}

	public HtmlInputText getTxtBuscar() {
		return txtBuscar;
	}

	public void setTxtBuscar(HtmlInputText txtBuscar) {
		this.txtBuscar = txtBuscar;
	}

	public String getBuscar() {
		return buscar;
	}

	public void setBuscar(String buscar) {
		this.buscar = buscar;
	}

	public HtmlSelectOneMenu getSeleconebusqueda() {
		return seleconebusqueda;
	}

	public void setSeleconebusqueda(HtmlSelectOneMenu seleconebusqueda) {
		this.seleconebusqueda = seleconebusqueda;
	}

	public String getBusbtipo() {
		return busbtipo;
	}

	public void setBusbtipo(String busbtipo) {
		this.busbtipo = busbtipo;
	}

	public void setlistProducto(List<Producto> listProducto) {
		this.listProducto = listProducto;
	}

	public List<Producto> getlistProducto() {
		return listProducto;
	}

	public Utilidades getUtils() {
		return Utils;
	}

	public void setUtils(Utilidades utils) {
		Utils = utils;
	}

	public void setProunimedw(ProunimedWork[] prounimedw) {
		this.prounimedw = prounimedw;
	}

	public ProunimedWork[] getProunimedw() {
		Producto_logica = new ProductoLogica();
		if (prounimedw == null && listProunimed != null) {
			try {
				if (listProunimed.size() > 0) {
					prounimedw = Producto_logica
							.findProunimedSelectedRow(listProunimed);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return prounimedw;
	}

	public void setProbodegaw(ProbodegaWork[] probodegaw) {
		this.probodegaw = probodegaw;
	}

	public ProbodegaWork[] getProbodegaw() {
		Producto_logica = new ProductoLogica();
		if (probodegaw == null && listProbodega != null) {
			try {
				if (listProbodega.size() > 0) {
					probodegaw = Producto_logica
							.findProbodegaSelectedRow(listProbodega);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return probodegaw;
	}

	public void setProductow(ProductoWork[] productow) {
		this.productow = productow;
	}

	public ProductoWork[] getProductow() {
		Producto_logica = new ProductoLogica();
		if (productow == null) {
			try {
				if (listProducto.size() > 0) {
					productow = Producto_logica
							.findProductoSelectedRow(listProducto);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return productow;
	}

	public String getBusquedacmbbus() {
		return busquedacmbbus;
	}

	public void setBusquedacmbbus(String busquedacmbbus) {
		this.busquedacmbbus = busquedacmbbus;
	}

	public void rowSelectionListener(RowSelectorEvent event) {
		ProductoWork regProducto = null;
		ProductoWork[] lista = getProductow();
		uniselec = true;
		for (int i = 0; i < getProductow().length; i++) {
			regProducto = lista[i];
			if (regProducto.isSelected()) {
				ProductoEdicion = regProducto.getProductow();
				regTable = i;
			}
		}
	}

	public void rowSelectionListenerProunimed(RowSelectorEvent event) {
		ProunimedWork regProducto = null;
		ProunimedWork[] lista = getProunimedw();
		selecprounimed = true;
		for (int i = 0; i < getProunimedw().length; i++) {
			regProducto = lista[i];
			if (regProducto.isSelected()) {
				ProunimedEdicion = regProducto.getProunimedw();
				regTable = i;
			}
		}
	}

	public void rowSelectionListenerProbodega(RowSelectorEvent event) {
		ProbodegaWork regProducto = null;
		ProbodegaWork[] lista = getProbodegaw();
		selecprobodega = true;
		for (int i = 0; i < getProbodegaw().length; i++) {
			regProducto = lista[i];
			if (regProducto.isSelected()) {
				ProbodegaEdicion = regProducto.getProbodegaw();
				regTable = i;
			}
		}
	}

	public void action_Buscar(ActionEvent ae) {

		Producto_logica = new ProductoLogica();
		uniselec = false;
		try {
			if (busquedacmbbus.equals("procodigo")) {
				if (buscar.length() > 0) {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Codigo :" + buscar));
					listProducto.clear();
					listProducto = Producto_logica.findByPropertyAll(
							"procodigo", buscar, "");
					listProducto = getlistProducto();
					productow = null;
				} else {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(
									"Debe Agregar un valor de busqueda"));
				}

			} else {
				if (busquedacmbbus.equals("pronombre")) {

					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Nombre :" + buscar));
					listProducto.clear();
					listProducto = Producto_logica.findByPropertyAll(
							"pronombre", buscar, "");
					listProducto = getlistProducto();
					productow = null;

				} else {

					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Todos."));

					listProducto.clear();
					listProducto = Producto_logica.findAll("");
					listProducto = getlistProducto();
					productow = null;

				}
			}
		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	public void Activapopupeliminar(ActionEvent ae) {
		modalRendered = !modalRendered;
	}

	public void action_confirmacionEliminar(ActionEvent ae) {
		if (uniselec == true) {
			if (productow != null) {
				Producto_logica = new ProductoLogica();
				try {
					setNombreEliminar("Producto Codigo :"
							+ ProductoEdicion.getProcodigo() + " Nombre :"
							+ ProductoEdicion.getPronombre());
				} catch (Exception e) {
					e.printStackTrace();
				}
				Activapopupeliminar(ae);
			} else {
				FacesContext.getCurrentInstance().addMessage("msg",
						new FacesMessage("Debe seleccionar un Producto"));
			}
		} else {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe seleccionar un Producto"));
		}
	}

	public void action_EliminarTabla(ActionEvent ae) {
		Producto_logica = new ProductoLogica();
		Activapopupeliminar(ae);
		if (ProductoEdicion == null || uniselec == false) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe selecionar un Producto"));
		} else {
			try {
				Producto_logica.Eliminar_Producto(ProductoEdicion);
				listProducto.remove(regTable);
				productow = null;
				ProductoEdicion = null;
				uniselec = false;
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(
								"Registro eliminado Satisfactoriamente."));
			} catch (Exception e) {
				e.printStackTrace();
				FacesContext
						.getCurrentInstance()
						.addMessage(
								"msg",
								new FacesMessage(
										"No se puede eliminar el registro, tiene movimiento."));
			}

		}
	}

	// //////////////////////////
	// ////////////////////////// Producto Propiedades //
	// ////////////////////////
	// //////////////////////////

	private HtmlInputText txtcodigo;
	private HtmlInputText txtnombre;
	private HtmlInputText txtusunombre;
	private HtmlInputText txtusuario;
	private boolean sweditando = false;
	private boolean swnuevo = false;
	private boolean bactivo;
	private boolean bserie;
	private boolean bvence;
	private String bnomcorto;

	private boolean modalRenderedguardar;
	private boolean modalRenderedcancelar;
	private String bcodigo;
	private String bnombre;
	private Producto MiProducto;

	private String bproveecod;
	private String bivacod;
	private String bundcod;
	private String blineacod;
	private HtmlInputText txtbproveecod;
	private HtmlInputText txtbivacod;
	private HtmlInputText txtbundcod;
	private HtmlInputText txtblineacod;
	private String bproveenom;
	private String bivanom;
	private String bundnom;
	private String blineanom;

	private Tipoiva MiIva;
	private Unimed MiUnimed;
	private Unimed MiUnimedpro;
	private String tipobusprounimed;
	private Vinculado MiVinculado;
	private Linea MiLinea;

	private IIvaLogica Iva_logica;
	private IUnimedLogica Unimed_logica;
	private IVinculadoLogica Vinculado_logica;
	private ILineaLogica Linea_logica;

	private List<Vinculado> listaProveepopup;
	private HtmlCommandButton popup_cmdselecionarProvee;
	private HtmlInputText txtBuscarProvee;
	private String buscarProvee;
	private String busquedacmbProvee;
	private boolean modalpopupProvee;

	private List<Linea> listaLineapopup;
	private HtmlCommandButton popup_cmdselecionarLinea;
	private HtmlInputText txtBuscarLinea;
	private String buscarLinea;
	private String busquedacmbLinea;
	private boolean modalpopupLinea;

	private List<Unimed> listaUnimedpopup;
	private HtmlCommandButton popup_cmdselecionarUnimed;
	private HtmlInputText txtBuscarUnimed;
	private String buscarUnimed;
	private String busquedacmbUnimed;
	private boolean modalpopupUnimed;

	private List<Tipoiva> listaTipoivapopup;
	private HtmlCommandButton popup_cmdselecionarTipoiva;
	private HtmlInputText txtBuscarTipoiva;
	private String buscarTipoiva;
	private String busquedacmbTipoiva;
	private boolean modalpopupTipoiva;

	public HtmlInputText getTxtcodigo() {
		return txtcodigo;
	}

	public void setTxtcodigo(HtmlInputText txtcodigo) {
		this.txtcodigo = txtcodigo;
	}

	public HtmlInputText getTxtnombre() {
		return txtnombre;
	}

	public void setTxtnombre(HtmlInputText txtnombre) {
		this.txtnombre = txtnombre;
	}

	public HtmlInputText getTxtusunombre() {
		return txtusunombre;
	}

	public void setTxtusunombre(HtmlInputText txtusunombre) {
		this.txtusunombre = txtusunombre;
	}

	public HtmlInputText getTxtusuario() {
		return txtusuario;
	}

	public void setTxtusuario(HtmlInputText txtusuario) {
		this.txtusuario = txtusuario;
	}

	public boolean isSweditando() {
		return sweditando;
	}

	public void setSweditando(boolean sweditando) {
		this.sweditando = sweditando;
	}

	public boolean isSwnuevo() {
		return swnuevo;
	}

	public void setSwnuevo(boolean swnuevo) {
		this.swnuevo = swnuevo;
	}

	public boolean isBactivo() {
		return bactivo;
	}

	public String getBcodigo() {
		return bcodigo;
	}

	public void setBcodigo(String bcodigo) {
		this.bcodigo = bcodigo;
	}

	public String getBnombre() {
		return bnombre;
	}

	public void setBnombre(String bnombre) {
		this.bnombre = bnombre;
	}

	public Producto getMiProducto() {
		return MiProducto;
	}

	public void setMiProducto(Producto miProducto) {
		MiProducto = miProducto;
	}

	public void setBactivo(boolean bactivo) {
		this.bactivo = bactivo;
	}

	public String getBproveecod() {
		return bproveecod;
	}

	public void setBproveecod(String bproveecod) {
		this.bproveecod = bproveecod;
	}

	public String getBivacod() {
		return bivacod;
	}

	public void setBivacod(String bivacod) {
		this.bivacod = bivacod;
	}

	public String getBundcod() {
		return bundcod;
	}

	public void setBundcod(String bundcod) {
		this.bundcod = bundcod;
	}

	public String getBlineacod() {
		return blineacod;
	}

	public void setBlineacod(String blineacod) {
		this.blineacod = blineacod;
	}

	public HtmlInputText getTxtbproveecod() {
		return txtbproveecod;
	}

	public void setTxtbproveecod(HtmlInputText txtbproveecod) {
		this.txtbproveecod = txtbproveecod;
	}

	public HtmlInputText getTxtbivacod() {
		return txtbivacod;
	}

	public void setTxtbivacod(HtmlInputText txtbivacod) {
		this.txtbivacod = txtbivacod;
	}

	public HtmlInputText getTxtbundcod() {
		return txtbundcod;
	}

	public void setTxtbundcod(HtmlInputText txtbundcod) {
		this.txtbundcod = txtbundcod;
	}

	public HtmlInputText getTxtblineacod() {
		return txtblineacod;
	}

	public void setTxtblineacod(HtmlInputText txtblineacod) {
		this.txtblineacod = txtblineacod;
	}

	public String getBproveenom() {
		return bproveenom;
	}

	public List<Vinculado> getListaProveepopup() {
		return listaProveepopup;
	}

	public void setListaProveepopup(List<Vinculado> listaProveepopup) {
		this.listaProveepopup = listaProveepopup;
	}

	public HtmlCommandButton getPopup_cmdselecionarProvee() {
		return popup_cmdselecionarProvee;
	}

	public void setPopup_cmdselecionarProvee(
			HtmlCommandButton popup_cmdselecionarProvee) {
		this.popup_cmdselecionarProvee = popup_cmdselecionarProvee;
	}

	public HtmlInputText getTxtBuscarProvee() {
		return txtBuscarProvee;
	}

	public void setTxtBuscarProvee(HtmlInputText txtBuscarProvee) {
		this.txtBuscarProvee = txtBuscarProvee;
	}

	public String getBuscarProvee() {
		return buscarProvee;
	}

	public void setBuscarProvee(String buscarProvee) {
		this.buscarProvee = buscarProvee;
	}

	public String getBusquedacmbProvee() {
		return busquedacmbProvee;
	}

	public void setBusquedacmbProvee(String busquedacmbProvee) {
		this.busquedacmbProvee = busquedacmbProvee;
	}

	public boolean isModalpopupProvee() {
		return modalpopupProvee;
	}

	public void setModalpopupProvee(boolean modalpopupProvee) {
		this.modalpopupProvee = modalpopupProvee;
	}

	public List<Linea> getListaLineapopup() {
		return listaLineapopup;
	}

	public void setListaLineapopup(List<Linea> listaLineapopup) {
		this.listaLineapopup = listaLineapopup;
	}

	public HtmlCommandButton getPopup_cmdselecionarLinea() {
		return popup_cmdselecionarLinea;
	}

	public void setPopup_cmdselecionarLinea(
			HtmlCommandButton popup_cmdselecionarLinea) {
		this.popup_cmdselecionarLinea = popup_cmdselecionarLinea;
	}

	public HtmlInputText getTxtBuscarLinea() {
		return txtBuscarLinea;
	}

	public void setTxtBuscarLinea(HtmlInputText txtBuscarLinea) {
		this.txtBuscarLinea = txtBuscarLinea;
	}

	public String getBuscarLinea() {
		return buscarLinea;
	}

	public void setBuscarLinea(String buscarLinea) {
		this.buscarLinea = buscarLinea;
	}

	public String getBusquedacmbLinea() {
		return busquedacmbLinea;
	}

	public void setBusquedacmbLinea(String busquedacmbLinea) {
		this.busquedacmbLinea = busquedacmbLinea;
	}

	public boolean isModalpopupLinea() {
		return modalpopupLinea;
	}

	public void setModalpopupLinea(boolean modalpopupLinea) {
		this.modalpopupLinea = modalpopupLinea;
	}

	public List<Unimed> getListaUnimedpopup() {
		return listaUnimedpopup;
	}

	public void setListaUnimedpopup(List<Unimed> listaUnimedpopup) {
		this.listaUnimedpopup = listaUnimedpopup;
	}

	public HtmlCommandButton getPopup_cmdselecionarUnimed() {
		return popup_cmdselecionarUnimed;
	}

	public void setPopup_cmdselecionarUnimed(
			HtmlCommandButton popup_cmdselecionarUnimed) {
		this.popup_cmdselecionarUnimed = popup_cmdselecionarUnimed;
	}

	public HtmlInputText getTxtBuscarUnimed() {
		return txtBuscarUnimed;
	}

	public void setTxtBuscarUnimed(HtmlInputText txtBuscarUnimed) {
		this.txtBuscarUnimed = txtBuscarUnimed;
	}

	public String getBuscarUnimed() {
		return buscarUnimed;
	}

	public void setBuscarUnimed(String buscarUnimed) {
		this.buscarUnimed = buscarUnimed;
	}

	public String getBusquedacmbUnimed() {
		return busquedacmbUnimed;
	}

	public void setBusquedacmbUnimed(String busquedacmbUnimed) {
		this.busquedacmbUnimed = busquedacmbUnimed;
	}

	public boolean isModalpopupUnimed() {
		return modalpopupUnimed;
	}

	public void setModalpopupUnimed(boolean modalpopupUnimed) {
		this.modalpopupUnimed = modalpopupUnimed;
	}

	public List<Tipoiva> getListaTipoivapopup() {
		return listaTipoivapopup;
	}

	public void setListaTipoivapopup(List<Tipoiva> listaTipoivapopup) {
		this.listaTipoivapopup = listaTipoivapopup;
	}

	public HtmlCommandButton getPopup_cmdselecionarTipoiva() {
		return popup_cmdselecionarTipoiva;
	}

	public void setPopup_cmdselecionarTipoiva(
			HtmlCommandButton popup_cmdselecionarTipoiva) {
		this.popup_cmdselecionarTipoiva = popup_cmdselecionarTipoiva;
	}

	public HtmlInputText getTxtBuscarTipoiva() {
		return txtBuscarTipoiva;
	}

	public void setTxtBuscarTipoiva(HtmlInputText txtBuscarTipoiva) {
		this.txtBuscarTipoiva = txtBuscarTipoiva;
	}

	public String getBuscarTipoiva() {
		return buscarTipoiva;
	}

	public void setBuscarTipoiva(String buscarTipoiva) {
		this.buscarTipoiva = buscarTipoiva;
	}

	public String getBusquedacmbTipoiva() {
		return busquedacmbTipoiva;
	}

	public void setBusquedacmbTipoiva(String busquedacmbTipoiva) {
		this.busquedacmbTipoiva = busquedacmbTipoiva;
	}

	public boolean isModalpopupTipoiva() {
		return modalpopupTipoiva;
	}

	public void setModalpopupTipoiva(boolean modalpopupTipoiva) {
		this.modalpopupTipoiva = modalpopupTipoiva;
	}

	public void setBproveenom(String bproveenom) {
		this.bproveenom = bproveenom;
	}

	public String getBivanom() {
		return bivanom;
	}

	public void setBivanom(String bivanom) {
		this.bivanom = bivanom;
	}

	public String getBundnom() {
		return bundnom;
	}

	public void setBundnom(String bundnom) {
		this.bundnom = bundnom;
	}

	public String getBlineanom() {
		return blineanom;
	}

	public void setBlineanom(String blineanom) {
		this.blineanom = blineanom;
	}

	public Tipoiva getMiIva() {
		return MiIva;
	}

	public IProductoLogica getProducto_logica() {
		return Producto_logica;
	}

	public void setProducto_logica(IProductoLogica producto_logica) {
		Producto_logica = producto_logica;
	}

	public IIvaLogica getIva_logica() {
		return Iva_logica;
	}

	public void setIva_logica(IIvaLogica iva_logica) {
		Iva_logica = iva_logica;
	}

	public IUnimedLogica getUnimed_logica() {
		return Unimed_logica;
	}

	public void setUnimed_logica(IUnimedLogica unimed_logica) {
		Unimed_logica = unimed_logica;
	}

	public IVinculadoLogica getVinculado_logica() {
		return Vinculado_logica;
	}

	public void setVinculado_logica(IVinculadoLogica vinculado_logica) {
		Vinculado_logica = vinculado_logica;
	}

	public ILineaLogica getLinea_logica() {
		return Linea_logica;
	}

	public void setLinea_logica(ILineaLogica linea_logica) {
		Linea_logica = linea_logica;
	}

	public void setMiIva(Tipoiva miIva) {
		MiIva = miIva;
	}

	public Unimed getMiUnimed() {
		return MiUnimed;
	}

	public void setMiUnimed(Unimed miUnimed) {
		MiUnimed = miUnimed;
	}

	public Vinculado getMiVinculado() {
		return MiVinculado;
	}

	public void setMiVinculado(Vinculado miVinculado) {
		MiVinculado = miVinculado;
	}

	public Linea getMiLinea() {
		return MiLinea;
	}

	public void setMiLinea(Linea miLinea) {
		MiLinea = miLinea;
	}

	public boolean isModalRenderedguardar() {
		return modalRenderedguardar;
	}

	public void setModalRenderedguardar(boolean modalRenderedguardar) {
		this.modalRenderedguardar = modalRenderedguardar;
	}

	public boolean isModalRenderedcancelar() {
		return modalRenderedcancelar;
	}

	public void setModalRenderedcancelar(boolean modalRenderedcancelar) {
		this.modalRenderedcancelar = modalRenderedcancelar;
	}

	public int getSwestado() {
		return swestado;
	}

	public boolean isBserie() {
		return bserie;
	}

	public void setBserie(boolean bserie) {
		this.bserie = bserie;
	}

	public boolean isBvence() {
		return bvence;
	}

	public void setBvence(boolean bvence) {
		this.bvence = bvence;
	}

	public String getBnomcorto() {
		return bnomcorto;
	}

	public void setBnomcorto(String bnomcorto) {
		this.bnomcorto = bnomcorto;
	}

	public void setSwestado(int swestado) {
		this.swestado = swestado;
	}

	public String action_modificar() {
		swnuevo = false;
		sweditando = true;
		return "";
	}

	public void validaId(ActionEvent ae) {
		try {
			MiProducto = new Producto();
			MiProducto = Producto_logica.consultarRegProducto(bcodigo);
			if (MiProducto != null) {
				FacesContext.getCurrentInstance().addMessage("msg",
						new FacesMessage("Este codigo de Producto ya existe"));
				bcodigo = "";
			} else {
				txtnombre.requestFocus();
			}
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}

	public void toggleModalguardar(ActionEvent ae) {

		try {
			action_ValidaProvee(ae);
			action_ValidaLinea(ae);
			action_ValidaIva(ae);
			action_ValidaUnidad(ae);

			MiProducto = new Producto();
			MiProducto = Producto_logica.consultarRegProducto(bcodigo);
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		if (MiProducto != null && swnuevo == true) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Este codigo de Producto ya existe"));
		} else {

			if (MiLinea == null || MiVinculado == null || MiUnimed == null
					|| MiIva == null) {
				FacesContext
						.getCurrentInstance()
						.addMessage(
								"msg",
								new FacesMessage(
										"Verifique el ingreso de Proveedor,Unidad de Medida, Tipo de Iva o Linea del Producto"));
			} else {

				if (bcodigo == "" || bcodigo == null) {
					FacesContext
							.getCurrentInstance()
							.addMessage(
									"msg",
									new FacesMessage(
											"Debe agregar un Codigo para este Producto"));
				} else {
					if (bnombre == "" || bnombre == null) {
						FacesContext
								.getCurrentInstance()
								.addMessage(
										"msg",
										new FacesMessage(
												"Debe agregar un Nombre para este Producto"));
					} else {
						modalRenderedguardar = !modalRenderedguardar;
					}
				}
			}
		}
	}

	public void toggleModalcancelar(ActionEvent ae) {
		modalRenderedcancelar = !modalRenderedcancelar;
	}

	public String action_salir() {
		return "Producto_B";
	}

	// action_Cancelar
	public String action_cancelar() {
		modalRenderedcancelar = !modalRenderedcancelar;
		return "Producto_B";
	}

	public String action_guardar() {
		Producto_logica = new ProductoLogica();
		Prounimed_logica = new UnimedLogica();

		String retornar = ".";

		MiProducto = null;
		MiProducto = new Producto();

		if (swnuevo == true) {
			Utils = new Utilidades();
			MiProducto.setProcodigo(bcodigo);
			// retornar = "Producto_B";
		} else {
			MiProducto = ProductoEdicion;
		}

		if (bnomcorto == null || bnomcorto == "") {
			bnomcorto = " ";
		}

		MiProducto.setPronombre(bnombre);
		MiProducto.setProcorto(bnomcorto);

		if (bactivo == true) {
			MiProducto.setProactivo(new Long(1));
		} else {
			MiProducto.setProactivo(new Long(0));
		}
		if (bserie == true) {
			MiProducto.setProserie(new Long(1));
		} else {
			MiProducto.setProserie(new Long(0));
		}
		if (bvence == true) {
			MiProducto.setProvence(new Long(1));
		} else {
			MiProducto.setProvence(new Long(0));
		}

		MiProducto.setLinea(MiLinea);
		MiProducto.setVinculado(MiVinculado);
		MiProducto.setUnimed(MiUnimed);
		MiProducto.setTipoiva(MiIva);

		modalRenderedguardar = !modalRenderedguardar;
		try {

			menu_ppal_MB obje = (menu_ppal_MB) FacesUtils
					.getManagedBean("menu_ppal_MB");
			MiProducto.setDlluser(obje.getMiDlluser());

			if (swnuevo == true) {
				MiProducto.setPrologfec(new Timestamp(Calendar.getInstance()
						.getTimeInMillis()));
				ProductoEdicion = MiProducto;
				Producto_logica.Guarda_Producto(MiProducto);

			} else {
				ProductoEdicion = MiProducto;
				Producto_logica.Modifica_Producto(MiProducto);
			}

			listProducto.clear();
			listProducto.add(MiProducto);
			productow = null;
			// ProductoEdicion = null;

			String retur = Producto_logica.cargar_ProUnimed(MiProducto
					.getProcodigo(), MiProducto.getUnimed().getUmdcodigo());

			listProunimed = Prounimed_logica.buscarTodosProUnimed(bcodigo);
			prounimedw = null;

			sweditando = false;
			swnuevo = false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return retornar;
	}

	public String action_Nuevo() {
		swestado = 1;
		sweditando = true;
		swnuevo = true;
		bcodigo = null;
		bnombre = null;
		bactivo = true;
		bnomcorto = null;
		bserie = false;
		bvence = false;
		MiLinea = null;
		MiVinculado = null;
		bbodegas = null;
		bbodegasnom = null;
		bprounimed = null;
		bprounimednom = null;
		aprocantidad = Double.valueOf("0");
		MiUnimed = null;
		MiIva = null;
		bproveecod = null;
		bivacod = null;
		bundcod = null;
		blineacod = null;
		bproveenom = null;
		bivanom = null;
		bundnom = null;
		blineanom = null;
		listProbodega = null;
		listProunimed = null;
		prounimedw = null;
		probodegaw = null;

		return "Producto_P";
	}

	public String action_Editar() {

		String retornar = "";
		if (ProductoEdicion == null || uniselec == false) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe selecionar un Producto "));
		} else {

			MiProducto = null;
			Producto_logica = new ProductoLogica();
			Probodega_logica = new ProbodegaLogica();
			Prounimed_logica = new UnimedLogica();

			try {
				MiProducto = Producto_logica
						.consultarRegProducto(ProductoEdicion.getProcodigo());
				if (MiProducto != null) {
					swestado = 2;
					sweditando = false;
					swnuevo = false;
					bcodigo = MiProducto.getProcodigo();
					bnombre = MiProducto.getPronombre();
					bnomcorto = MiProducto.getProcorto();

					MiLinea = MiProducto.getLinea();
					MiVinculado = MiProducto.getVinculado();
					MiUnimed = MiProducto.getUnimed();
					MiIva = MiProducto.getTipoiva();

					bproveecod = MiVinculado.getVincedula();
					bivacod = MiIva.getIvacodigo();

					bundcod = MiUnimed.getUmdcodigo();
					blineacod = MiLinea.getLincodigo();
					bproveenom = MiVinculado.getVinnombre();
					bivanom = MiIva.getIvanombre();
					bundnom = MiUnimed.getUmdnombre();
					blineanom = MiLinea.getLinnombre();

					if (MiProducto.getProactivo().longValue() == 1) {
						bactivo = true;
					} else {
						bactivo = false;
					}
					if (MiProducto.getProserie().longValue() == 1) {
						bserie = true;
					} else {
						bserie = false;
					}
					if (MiProducto.getProvence().longValue() == 1) {
						bvence = true;
					} else {
						bvence = false;
					}

					listProbodega = Probodega_logica.findByPropertys_all(
							"producto.procodigo", bcodigo, "");
					probodegaw = null;
					listProunimed = Prounimed_logica
							.buscarTodosProUnimed(bcodigo);
					prounimedw = null;
					bbodegas = null;
					bbodegasnom = null;
					bprounimed = null;
					bprounimednom = null;
					aprocantidad = Double.valueOf("0");

					retornar = "Producto_P";
				}

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return retornar;

	}

	public void action_ValidaIva(ActionEvent ae) throws Exception {
		MiIva = null;
		Iva_logica = new IvaLogica();
		bivacod = bivacod.toUpperCase();
		bivacod = bivacod.trim();
		MiIva = Iva_logica.findByPropertyActivo("ivacodigo", bivacod);

		if (MiIva == null) {
			MiIva = null;
			bivanom = "";
			FacesContext.getCurrentInstance().addMessage(
					"msg",
					new FacesMessage("Iva " + bivacod
							+ " no existe o no se encuentra activo"));
			bivacod = "";
		} else {
			bivanom = MiIva.getIvanombre();
		}
	}

	public void action_ValidaUnidad(ActionEvent ae) throws Exception {
		MiUnimed = null;
		Unimed_logica = new UnimedLogica();
		Utils = new Utilidades();
		bundcod = bundcod.toUpperCase();
		bundcod = bundcod.trim();
		bundcod = Utils.Completar_Cadena(bundcod, " ", 4);
		MiUnimed = Unimed_logica.findByPropertyActivo("umdcodigo", bundcod);

		if (MiUnimed == null) {
			MiUnimed = null;
			bundnom = "";
			FacesContext.getCurrentInstance().addMessage(
					"msg",
					new FacesMessage("Unidad de Medida " + bundcod
							+ " no existe o no se encuentra activa"));
			bundcod = "";
		} else {
			bundnom = MiUnimed.getUmdnombre();
		}
	}

	public void action_ValidaLinea(ActionEvent ae) throws Exception {
		MiLinea = null;
		Linea_logica = new LineaLogica();
		blineacod = blineacod.toUpperCase();
		blineacod = blineacod.trim();
		MiLinea = Linea_logica.findByPropertyActivo("lincodigo", blineacod);

		if (MiLinea == null) {
			MiLinea = null;
			blineanom = "";
			FacesContext.getCurrentInstance().addMessage(
					"msg",
					new FacesMessage("Linea " + blineacod
							+ " no existe o no se encuentra activa"));
			blineacod = "";
		} else {
			blineanom = MiLinea.getLinnombre();
		}
	}

	public void action_ValidaProvee(ActionEvent ae) throws Exception {
		MiVinculado = null;
		Vinculado_logica = new VinculadoLogica();
		bproveecod = bproveecod.toUpperCase();
		bproveecod = bproveecod.trim();
		MiVinculado = Vinculado_logica.findByPropertyActivo("vincedula",
				bproveecod);

		if (MiVinculado == null) {
			MiVinculado = null;
			bproveenom = "";
			FacesContext.getCurrentInstance().addMessage(
					"msg",
					new FacesMessage("Proveedor " + bproveecod
							+ " no existe o no se encuentra activo"));
			bproveecod = "";
		} else {
			bproveenom = MiVinculado.getVinnombre();
		}
	}

	public void popupAccion_EstadoProvee(ActionEvent ae) {
		modalpopupProvee = !modalpopupProvee;
	}

	public void popupAccion_EstadoLinea(ActionEvent ae) {
		modalpopupLinea = !modalpopupLinea;
	}

	public void popupAccion_EstadoTipoiva(ActionEvent ae) {
		modalpopupTipoiva = !modalpopupTipoiva;
	}

	public void popupAccion_EstadoUnimed(ActionEvent ae) {
		tipobusprounimed = "1";
		modalpopupUnimed = !modalpopupUnimed;
	}

	public void action_BuscarProvee(ActionEvent ae) {
		listaProveepopup = null;
		Vinculado_logica = new VinculadoLogica();

		try {
			if (busquedacmbProvee.equals("vinnombre")) {
				FacesContext.getCurrentInstance().addMessage(
						"msgbod",
						new FacesMessage(MessageBundleLoader
								.getMessage("busqueda.mensaje")
								+ " nombre :" + buscarProvee));
				listaProveepopup = Vinculado_logica
						.findByPropertyActivoLista("AND model.vinprovee = 1 AND model.vinnombre LIKE '%"
								+ buscarProvee.toUpperCase() + "%' ");

			} else {
				if (busquedacmbProvee.equals("vincedula")) {
					FacesContext.getCurrentInstance().addMessage(
							"msgbod",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Cedula :" + buscarProvee));
					listaProveepopup = Vinculado_logica
							.findByPropertyActivoLista("AND model.vinprovee = 1 AND model.vincedula LIKE '%"
									+ buscarProvee.toUpperCase() + "%' ");
				} else {

					if (busquedacmbProvee.equals("todos")) {
						FacesContext.getCurrentInstance().addMessage(
								"msgbod",
								new FacesMessage(MessageBundleLoader
										.getMessage("busqueda.mensaje")
										+ " Todos"));

						listaProveepopup = Vinculado_logica
								.findByPropertyActivoLista(" AND model.vinprovee = 1 ");
					}

				}
			}
		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	public void popupAccion_SelecionarProvee(ActionEvent ae) throws Exception {
		bproveecod = popup_cmdselecionarProvee.getValue().toString();
		action_ValidaProvee(ae);
		modalpopupProvee = !modalpopupProvee;
	}

	public void action_BuscarLinea(ActionEvent ae) {
		listaLineapopup = null;
		Linea_logica = new LineaLogica();

		try {
			if (busquedacmbLinea.equals("linnombre")) {
				FacesContext.getCurrentInstance().addMessage(
						"msgbod",
						new FacesMessage(MessageBundleLoader
								.getMessage("busqueda.mensaje")
								+ " nombre :" + buscarLinea));
				listaLineapopup = Linea_logica
						.findByPropertyActivoLista(" AND model.linnombre LIKE '%"
								+ buscarLinea.toUpperCase() + "%' ");

			} else {
				if (busquedacmbLinea.equals("lincodigo")) {
					FacesContext.getCurrentInstance().addMessage(
							"msgbod",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Codigo :" + buscarLinea));
					listaLineapopup = Linea_logica
							.findByPropertyActivoLista(" AND model.lincodigo LIKE '%"
									+ buscarLinea.toUpperCase() + "%' ");
				} else {

					if (busquedacmbLinea.equals("todos")) {
						FacesContext.getCurrentInstance().addMessage(
								"msgbod",
								new FacesMessage(MessageBundleLoader
										.getMessage("busqueda.mensaje")
										+ " Todos"));

						listaLineapopup = Linea_logica
								.findByPropertyActivoLista(" ");
					}

				}
			}
		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	public void popupAccion_SelecionarLinea(ActionEvent ae) throws Exception {
		blineacod = popup_cmdselecionarLinea.getValue().toString();
		action_ValidaLinea(ae);
		modalpopupLinea = !modalpopupLinea;
	}

	public void action_BuscarIva(ActionEvent ae) {
		listaTipoivapopup = null;
		Iva_logica = new IvaLogica();

		try {
			if (busquedacmbTipoiva.equals("ivanombre")) {
				FacesContext.getCurrentInstance().addMessage(
						"msgbod",
						new FacesMessage(MessageBundleLoader
								.getMessage("busqueda.mensaje")
								+ " nombre :" + buscarTipoiva));
				listaTipoivapopup = Iva_logica
						.findByPropertyActivoLista(" AND model.ivanombre LIKE '%"
								+ buscarTipoiva.toUpperCase() + "%' ");

			} else {
				if (busquedacmbTipoiva.equals("ivacodigo")) {
					FacesContext.getCurrentInstance().addMessage(
							"msgbod",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Codigo :" + buscarTipoiva));
					listaTipoivapopup = Iva_logica
							.findByPropertyActivoLista(" AND model.ivacodigo LIKE '%"
									+ buscarTipoiva.toUpperCase() + "%' ");
				} else {

					if (busquedacmbTipoiva.equals("todos")) {
						FacesContext.getCurrentInstance().addMessage(
								"msgbod",
								new FacesMessage(MessageBundleLoader
										.getMessage("busqueda.mensaje")
										+ " Todos"));

						listaTipoivapopup = Iva_logica
								.findByPropertyActivoLista(" ");
					}

				}
			}
		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	public void popupAccion_SelecionarIva(ActionEvent ae) throws Exception {
		bivacod = popup_cmdselecionarTipoiva.getValue().toString();
		action_ValidaIva(ae);
		modalpopupTipoiva = !modalpopupTipoiva;
	}

	public void action_BuscarUnimed(ActionEvent ae) {
		listaUnimedpopup = null;
		Unimed_logica = new UnimedLogica();

		try {
			if (busquedacmbUnimed.equals("umdnombre")) {
				FacesContext.getCurrentInstance().addMessage(
						"msgbod",
						new FacesMessage(MessageBundleLoader
								.getMessage("busqueda.mensaje")
								+ " nombre :" + buscarUnimed));
				listaUnimedpopup = Unimed_logica
						.findByPropertyActivoLista(" AND model.umdnombre LIKE '%"
								+ buscarUnimed.toUpperCase() + "%' ");

			} else {
				if (busquedacmbUnimed.equals("umdcodigo")) {
					FacesContext.getCurrentInstance().addMessage(
							"msgbod",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Codigo :" + buscarUnimed));
					listaUnimedpopup = Unimed_logica
							.findByPropertyActivoLista(" AND model.umdcodigo LIKE '%"
									+ buscarUnimed.toUpperCase() + "%' ");
				} else {

					if (busquedacmbUnimed.equals("todos")) {
						FacesContext.getCurrentInstance().addMessage(
								"msgbod",
								new FacesMessage(MessageBundleLoader
										.getMessage("busqueda.mensaje")
										+ " Todos"));

						listaUnimedpopup = Unimed_logica
								.findByPropertyActivoLista(" ");
					}

				}
			}
		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	public void popupAccion_SelecionarUnimed(ActionEvent ae) throws Exception {
		if (tipobusprounimed == "1") {
			bundcod = popup_cmdselecionarUnimed.getValue().toString();
			action_ValidaUnidad(ae);
		} else {
			bprounimed = popup_cmdselecionarUnimed.getValue().toString();
			action_Validaprounimed(ae);
		}

		modalpopupUnimed = !modalpopupUnimed;
	}

	public void action_EliminarTablaprobodega(ActionEvent ae) {
		Probodega_logica = new ProbodegaLogica();
		Activapopupeliminarprobodega(ae);
		if (ProbodegaEdicion == null || selecprobodega == false) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe selecionar una Bodega"));
		} else {
			try {
				Probodega_logica.Eliminar_Probodega(ProbodegaEdicion);
				listProbodega.remove(regTable);
				probodegaw = null;
				ProbodegaEdicion = null;
				selecprobodega = false;
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(
								"Registro eliminado Satisfactoriamente."));
			} catch (Exception e) {
				e.printStackTrace();
				FacesContext
						.getCurrentInstance()
						.addMessage(
								"msg",
								new FacesMessage(
										"No se puede eliminar el registro, tiene movimiento."));
			}

		}
	}

	public void action_EliminarTablaprounimed(ActionEvent ae) {
		Prounimed_logica = new UnimedLogica();
		Activapopupeliminarprounimed(ae);
		if (ProunimedEdicion == null || selecprounimed == false) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe selecionar una Unidad de medida"));
		} else {
			try {
				Prounimed_logica.Eliminar_Prounimed(ProunimedEdicion);
				listProunimed.remove(regTable);
				prounimedw = null;
				ProunimedEdicion = null;
				selecprounimed = false;
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(
								"Registro eliminado Satisfactoriamente."));
			} catch (Exception e) {
				e.printStackTrace();
				FacesContext
						.getCurrentInstance()
						.addMessage(
								"msg",
								new FacesMessage(
										"No se puede eliminar el registro, tiene movimiento."));
			}

		}
	}

	public void Activapopupeliminarprounimed(ActionEvent ae) {
		modalRenderedprounimed = !modalRenderedprounimed;
	}

	public void Activapopupeliminarprobodega(ActionEvent ae) {
		modalRenderedprobodega = !modalRenderedprobodega;
	}

	public void action_confirmacionEliminarprounimed(ActionEvent ae) {
		if (selecprounimed == true) {
			if (prounimedw != null) {
				try {
					setNombreEliminarprounimed("Unidad de medida Codigo :"
							+ ProunimedEdicion.getUnimed().getUmdcodigo()
							+ " - "
							+ ProunimedEdicion.getUnimed().getUmdnombre());
				} catch (Exception e) {
					e.printStackTrace();
				}
				Activapopupeliminarprounimed(ae);
			} else {
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(
								"Debe seleccionar una Unidad de medida"));
			}
		} else {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe seleccionar una Unidad de medida"));
		}
	}

	public void action_confirmacionEliminarprobodega(ActionEvent ae) {
		if (selecprobodega == true) {
			if (probodegaw != null) {
				if (ProbodegaEdicion.getPbdexiste() != 0
						|| ProbodegaEdicion.getPbdcomprm() != 0) {
					FacesContext
							.getCurrentInstance()
							.addMessage(
									"msg",
									new FacesMessage(
											"Bodega no puede  ser eliminada, Existen cantidades comprometidas."));
				} else {
					try {
						setNombreEliminarprobodega("Bodega Codigo :"
								+ ProbodegaEdicion.getBodega().getBodcodigo()
								+ " - "
								+ ProbodegaEdicion.getBodega().getBodnombre());
					} catch (Exception e) {
						e.printStackTrace();
					}
					Activapopupeliminarprobodega(ae);
				}
			} else {
				FacesContext.getCurrentInstance().addMessage("msg",
						new FacesMessage("Debe seleccionar una Bodega"));
			}
		} else {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe seleccionar una Bodega"));
		}
	}

	public void popupAccion_CerrarBod(ActionEvent ae) {
		modalpopupbodega = !modalpopupbodega;
	}

	public void action_Validabodega(ActionEvent ae) throws Exception {
		miBodegas = null;
		Dlluser_logica = new DlluserLogica();
		bbodegas = bbodegas.toUpperCase();
		miBodegas = Dlluser_logica.consultarBodega(bbodegas);

		Prounimed_logica = new UnimedLogica();
		listProunimed = Prounimed_logica.buscarTodosProUnimed(bcodigo);
		prounimedw = null;

		if (miBodegas == null) {
			miBodegas = null;
			bbodegasnom = "";
			FacesContext.getCurrentInstance().addMessage(
					"msg",
					new FacesMessage("Bodega " + bbodegas
							+ " no existe o no se encuentra autorizada"));
			bbodegas = "";
		} else {
			bbodegasnom = miBodegas.getBodnombre();
		}

	}

	public void action_Validaprounimed(ActionEvent ae) throws Exception {
		MiUnimedpro = null;
		Unimed_logica = new UnimedLogica();
		Utils = new Utilidades();
		bprounimed = bprounimed.toUpperCase();
		bprounimed = bprounimed.trim();
		bprounimed = Utils.Completar_Cadena(bprounimed, " ", 4);
		MiUnimedpro = Unimed_logica.findByPropertyActivo("umdcodigo",
				bprounimed);

		Probodega_logica = new ProbodegaLogica();
		listProbodega = Probodega_logica.findByPropertys_all(
				"producto.procodigo", bcodigo, "");
		probodegaw = null;

		if (MiUnimedpro == null) {
			MiUnimedpro = null;
			FacesContext.getCurrentInstance().addMessage(
					"msg",
					new FacesMessage("Unidad de Medida " + bprounimed
							+ " no existe o no se encuentra activa"));
			bprounimednom = "";
		} else {
			bprounimednom = MiUnimedpro.getUmdnombre();
		}
	}

	public void popupAccion_Estadoprounimed(ActionEvent ae) {
		tipobusprounimed = "2";
		modalpopupUnimed = !modalpopupUnimed;
	}

	public void action_BuscarBod(ActionEvent ae) {
		listaBodegapopup = null;
		Dlluser_logica = new DlluserLogica();

		try {
			if (busquedacmbbodega.equals("bodnombre")) {
				FacesContext.getCurrentInstance().addMessage(
						"msgbod",
						new FacesMessage(MessageBundleLoader
								.getMessage("busqueda.mensaje")
								+ " nombre :" + buscarbod));
				listaBodegapopup = Dlluser_logica.consultarBodegaLike(
						"bodnombre", buscarbod.toUpperCase());

			} else {
				if (busquedacmbbodega.equals("bodcodigo")) {
					FacesContext.getCurrentInstance().addMessage(
							"msgbod",
							new FacesMessage(MessageBundleLoader
									.getMessage("busqueda.mensaje")
									+ " Codigo :" + buscarbod));
					listaBodegapopup = Dlluser_logica.consultarBodegaLike(
							"bodnombre", buscarbod.toUpperCase());
				} else {

					if (busquedacmbbodega.equals("todos")) {
						FacesContext.getCurrentInstance().addMessage(
								"msgbod",
								new FacesMessage(MessageBundleLoader
										.getMessage("busqueda.mensaje")
										+ " Todos :" + buscarbod));

						listaBodegapopup = Dlluser_logica.buscarBodegas_Aut();
					}

				}
			}
		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	public void popupAccion_SelecionarBod(ActionEvent ae) throws Exception {
		bbodegas = popup_cmdselecionarBod.getValue().toString();
		action_Validabodega(ae);
		modalpopupbodega = !modalpopupbodega;

	}

	public String action_AgregarProbodega() {
		if (swnuevo == true) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe Guardar primero el producto."));
		} else {
			try {
				action_Validabodega(null);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (bbodegasnom == "") {
				FacesContext.getCurrentInstance().addMessage("msg",
						new FacesMessage("Verifique el codigo de la Bodega."));
			} else {
				Probodega_logica = new ProbodegaLogica();
				Prounimed_logica = new UnimedLogica();
				try {
					listProbodegaver = Probodega_logica.findByPropertys_all(
							"producto.procodigo", bcodigo,
							"and model.bodega.bodcodigo = '" + bbodegas + "' ");

					if (listProbodegaver.size() > 0) {
						FacesContext
								.getCurrentInstance()
								.addMessage(
										"msg",
										new FacesMessage(
												"La bodega "
														+ bbodegas
														+ " se encuentra agregada a este producto"));
					} else {
						Dlluser_logica = new DlluserLogica();
						miProbodegaId = new ProbodegaId();
						miProbodega = new Probodega();
						miDlluser = new Dlluser();
						miProbodega.setBodega(miBodegas);
						miProbodega.setUnimed(MiUnimed);
						miProbodega.setProducto(MiProducto);
						miDlluser = Dlluser_logica
								.consulta_User((String) SessionUtil
										.get(SessionVars.USER));
						miProbodega.setDlluser(miDlluser);
						miProbodegaId.setPbdbodega(miBodegas.getBodcodigo());
						miProbodegaId.setPbdcuenta(".");
						miProbodegaId.setPbdempresa("001");
						miProbodegaId.setPbdproduct(MiProducto.getProcodigo());
						miProbodega.setId(miProbodegaId);
						miProbodega.setPbdexiste(Double.valueOf("0"));
						miProbodega.setPbdcomprm(Double.valueOf("0"));
						miProbodega.setPbdactivo(Long.valueOf("1"));

						Probodega_logica.Guarda_Probodega(miProbodega);

						listProbodega = Probodega_logica.findByPropertys_all(
								"producto.procodigo", bcodigo, "");
						probodegaw = null;
						FacesContext
								.getCurrentInstance()
								.addMessage(
										"msg",
										new FacesMessage(
												"Registro Agregado Satisfactoriamente."));
						bbodegas = null;
						bbodegasnom = "";
						listProunimed = Prounimed_logica
								.buscarTodosProUnimed(bcodigo);
						prounimedw = null;
					}

				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		return "";
	}

	public String action_AgregarProunimed() {
		
		Prounimed_logica = new UnimedLogica();
		Probodega_logica = new ProbodegaLogica();
		
		if (swnuevo == true) {
			FacesContext.getCurrentInstance().addMessage("msg",
					new FacesMessage("Debe Guardar primero el producto."));
		} else {

			if (aprocantidad == null) {
				aprocantidad = Double.valueOf("0");
			}

			try {
				action_Validaprounimed(null);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (bprounimednom == "") {
				FacesContext.getCurrentInstance().addMessage(
						"msg",
						new FacesMessage(
								"Verifique el codigo de la Unidad de medida."));
			} else {

				if (aprocantidad == 0) {
					FacesContext.getCurrentInstance().addMessage(
							"msg",
							new FacesMessage(
									"Debe Agregar un Factor de conversion."));
				} else {
					
					try {
						listProunimedver = Prounimed_logica
								.findByPropertys_all("producto.procodigo",
										bcodigo,
										"and model.unimed.umdcodigo = '"
												+ bprounimed + "' ");

						if (listProunimedver.size() > 0) {
							FacesContext
									.getCurrentInstance()
									.addMessage(
											"msg",
											new FacesMessage(
													"La Unidad "
															+ bprounimed
															+ " se encuentra agregada a este producto"));
						} else {
							Dlluser_logica = new DlluserLogica();
							miProunimedId = new ProunimedId();
							miProunimed = new Prounimed();
							miDlluser = new Dlluser();
							miProunimedId.setPumproduct(MiProducto
									.getProcodigo());
							miProunimedId.setPumunimed(MiUnimedpro
									.getUmdcodigo());
							miProunimed.setId(miProunimedId);
							miProunimed.setProducto(MiProducto);
							miProunimed.setPumfactor(aprocantidad);
							miProunimed.setUnimed(MiUnimedpro);
							miDlluser = Dlluser_logica
									.consulta_User((String) SessionUtil
											.get(SessionVars.USER));
							miProunimed.setDlluser(miDlluser);

							Prounimed_logica.Guarda_Prounimed(miProunimed);

							listProunimed = Prounimed_logica
									.buscarTodosProUnimed(bcodigo);

							prounimedw = null;
							FacesContext
									.getCurrentInstance()
									.addMessage(
											"msg",
											new FacesMessage(
													"Registro Agregado Satisfactoriamente."));
							bprounimed = null;
							bprounimednom = "";
							aprocantidad = Double.valueOf("0");
						}

					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}

			try {
				listProbodega = Probodega_logica.findByPropertys_all(
						"producto.procodigo", bcodigo, "");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			probodegaw = null;
		}

		return "";
	}

}
